import base64
import json
from PIL import Image
import os
import easyocr
import torch
from io import BytesIO

from config import SAVE_JSON

print(torch.__version__)
print(torch.cuda.is_available())
r = easyocr.Reader(['ch_sim', "en"], gpu=True)
# 导入socket模块，用于网络连接和通信
import socket
# 导入json模块，可能用于数据的序列化和反序列化，尽管在示例中未使用

# 创建一个TCP/IP socket
sk = socket.socket(family=socket.AF_INET,
                   type=socket.SOCK_STREAM)
# sk.settimeout(5000)
# 绑定socket到本地IP地址和端口号，用于监听进来的连接
# 绑定端口 bind()
sk.setblocking(True)
sk.bind(("10.10.127.34", 12345))
# 开始监听socket，允许进来的连接排队等待处理
# 监听 listen()
sk.listen(5)
# sk.setsockopt(1, "tcp_nodelay", 1)
# 通知用户服务器已经启动并等待连接
print("服务器启动完成，等待连接……")

# 进入无限循环，等待客户端连接

while True:
    # sk.settimeout(5000)
    # 接受一个客户端连接，返回一个新的socket用于与客户端通信
    # 接收连接 accept()
    conn, addr = sk.accept()
    # 通知用户客户端连接成功
    print(f"{addr}连接成功")

    # 从客户端接收数据，假设数据是UTF-8编码的文本
    received_data = b''
    while True:
        data = conn.recv(1024)
        if data:
            received_data += data
        else:
            break
    res1 = r.readtext(received_data, detail=0)
    print(res1)
    # 将消息编码为UTF-8并发送给客户端
    j = json.dumps({"data": res1}, ensure_ascii=False)
    total_sent = 0  # 记录已发送的数据总量
    file = open(SAVE_JSON, "w", encoding="utf-8")
    # 写入内容
    file.write(j)
    # 关闭文件
    file.close()
    # conn.sendall(j.encode("utf-8"))
    # conn.shutdown(1)
    # # 通过一个循环来确保所有数据都被发送
    # while total_sent < len(data):
    #     # 调用 send() 方法并更新 total_sent 变量来跟踪已发送的数据量
    #     sent = conn.send(data[total_sent:])
    #     # 如果 send() 方法返回0，这意味着套接字连接已断开，抛出一个异常
    #     if sent == 0:
    #         raise RuntimeError("Socket connection broken")
    #     total_sent += sent
    #     # 打印出每次发送的字节数和总共发送的字节数
    #     print(f"Sent {sent} bytes, total {total_sent} bytes")
    conn.close()
    # 通知用户消息发送成功，等待客户端响应
    print("发送成功！\n请等待客户端响应……")

# 关闭socket，结束程序
# 关闭套接字  close()
sk.close()